#ifndef ICONTAINER_DOCUMENT_H
#define ICONTAINER_DOCUMENT_H

#include "idocument.h"

#include <QtCore/QStringList>

namespace core
{
typedef QStringList DocumentCategories;

class IContainerDocument : public IDocument
{
    Q_OBJECT

public:
    virtual DocumentCategories categories() const = 0;

    virtual QList<QSharedPointer<IDocument> > documents(
        const QString& categoryName) const = 0;
    virtual QList<MimeType> categoryMimeTypes(
        const QString& categoryName) const = 0;

    virtual QString categoryFor(
        const QSharedPointer<IDocument>& document) const = 0;

    virtual bool isTopLevel() const = 0;

    virtual void addDocument(const QString& categoryName,
        const QSharedPointer<core::IDocument>& document) = 0;

    virtual void removeDocument(const QString& categoryName,
        const QSharedPointer<core::IDocument>& document) = 0;
    virtual void removeDocument(
        const QSharedPointer<core::IDocument>& document) = 0;

    virtual bool isChildrenDirty() const = 0;

    virtual ~IContainerDocument() {}
};

} // namespace core

#endif
